package day12.convertedstream;

import java.io.*;

/**
 * @author Xiao
 * @date 2021/8/2
 */
public class ObjectOperateStreamDemo03 {
    /**
     * serialVersionUID
     * 直接将序列化号定义成常量,可以解决类文件不一致的问题
     */
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //1.序列化学生对象
        //2.修改学生类信息：public Integer age; → private Integer age;
        //3.反序列化学生对象
//        method1();
        method2();
        /**
         * InvalidClassException:
         *      day12.convertedstream.Student; local class incompatible:
         *      stream classdesc serialVersionUID = -3754153208676831400,
         *      local class serialVersionUID = -5152969547588183276
         *
         *      serialVersionUID（序列号）：如果我们自己没有定义，那么虚拟机会根据类中的信息会自动的计算出一个序列号。
         *
         *      问题:如果我们修改了类中的信息.那么虚拟机会再次计算出一个序列号。
         *          第一步:把User对象序列化到本地. --- -5824992206458892149
         *          第二步:修改了javabean类，导致---类中的序列号4900133124572371851
         *          第三步:把文件中的对象读到内存．本地中的序列号和类中的序列号不一致了.
         *      解决?
         *          不让虚拟机帮我们自动计算,我们自己手动给出.而且这个值不要变.
         *
         */
    }

    private static void method2() throws IOException, ClassNotFoundException {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream
                ("videoPractice\\src\\day12\\otherstream\\convertedstream\\oosdemo1.txt"));
        //InvalidClassException
        Student o = (Student) ois.readObject();
        System.out.println(o);
        ois.close();
    }

    private static void method1() throws IOException {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream
                ("videoPractice\\src\\day12\\otherstream\\convertedstream\\oosdemo1.txt"));
        Student stu = new Student("aliang", 24);
        oos.writeObject(stu);
        oos.close();
    }
}
